package pl.egraveyard.security;

import org.springframework.security.GrantedAuthorityImpl;
import org.springframework.security.userdetails.User;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.security.userdetails.UsernameNotFoundException;

import pl.egraveyard.bo.UzytkownikBO;
import pl.egraveyard.domain.Klient;

/**
 * Usulaga pobierajaca dane uzytkownikow z bazy. Wykorzystywana do logowania
 * 
 * @author gunos
 * 
 */
public class LoginUserDetailsService implements UserDetailsService {
	private UzytkownikBO uzytkownikBO;

	/**
	 * @param uzytkownikBO
	 *            the uzytkownikBO to set
	 */
	public void setUzytkownikBO(UzytkownikBO uzytkownikBO) {
		this.uzytkownikBO = uzytkownikBO;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public UserDetails loadUserByUsername(final String login) {
		pl.egraveyard.domain.Uzytkownik user = uzytkownikBO.readUser(login);
		if (user != null) {
			return new User(login, user.getHaslo(), true, true, true, true,
					new GrantedAuthorityImpl[] { new GrantedAuthorityImpl(
							user instanceof Klient ? Role.ROLE_CUSTOMER
									.getValue() : Role.ROLE_USER.getValue()) });
		} else {
			throw new UsernameNotFoundException(
					"Nie odnaleziono uzytkownika i klienta podanym loginie"
							+ login);
		}
	}

}
